From 354d4435b179a343ee68294b85a151ec69279cf7 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 4 Aug 2016 15:22:00 +0100 Subject: [PATCH] gtk: Add convenience function for creating render nodes GtkWidget.create_render_node() sets up a GskRenderNode appropriate for rendering the contents of a widget, including its bounds, transformation, and anchor point. --- gtk/gtkwidget.c | 26 ++++++++++++++++++++++++++ gtk/gtkwidgetprivate.h | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index f2f4d5a6d9..cd3d4bc2ee 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -15839,6 +15839,32 @@ gtk_widget_get_renderer (GtkWidget *widget) return NULL; } +GskRenderNode * +gtk_widget_create_render_node (GtkWidget *widget, + GskRenderer *renderer, + const char *name) +{ + GskRenderNode *res = gsk_renderer_create_render_node (renderer); + GtkAllocation allocation, clip; + graphene_point3d_t p; + graphene_rect_t bounds; + graphene_matrix_t m; + + gtk_widget_get_allocation (widget, &allocation); + gtk_widget_get_clip (widget, &clip); + + graphene_rect_init (&bounds, 0, 0, clip.width, clip.height); + graphene_matrix_init_translate (&m, graphene_point3d_init (&p, allocation.x, allocation.y, 0)); + graphene_point3d_init (&p, clip.x - allocation.x, clip.y - allocation.y, 0); + + gsk_render_node_set_name (res, name); + gsk_render_node_set_bounds (res, &bounds); + gsk_render_node_set_transform (res, &m); + gsk_render_node_set_anchor_point (res, &p); + + return res; +} + GskRenderNode * gtk_widget_get_render_node (GtkWidget *widget, GskRenderer *renderer) diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h index 4903d06d23..2efd922111 100644 --- a/gtk/gtkwidgetprivate.h +++ b/gtk/gtkwidgetprivate.h @@ -299,6 +299,10 @@ void gtk_widget_render (GtkWidget GskRenderNode * gtk_widget_get_render_node (GtkWidget *widget, GskRenderer *renderer); +GskRenderNode * gtk_widget_create_render_node (GtkWidget *widget, + GskRenderer *renderer, + const char *name); + /* inline getters */ static inline gboolean -- 2.30.2